package ru.dasbundos;

import java.util.concurrent.Callable;

/*
 * Задача для исполнения.
 * */
public class ExecutableTask implements Callable<String> {

	/*
	 * Команда для исполнения
	 */
	private String mCommand;

	/*
	 * Параметры команды
	 */
	String mParameter;

	/*
	 * Результат обработки.
	 */
	private String mResult;

	public ExecutableTask(String command, String parameter) {
		mCommand = command;
		mParameter = parameter;
	}

	private String processCommand() {
		Double res = new Double(0);
		
		if (mCommand.equals("sqrt")) {
			res = Math.sqrt(Double.parseDouble(mParameter));
		}
		if (mCommand.equals("sum")) {
			for (int i=1; i<=Integer.parseInt(mParameter); i++)
				res += i;
		}
			
		try {
			Thread.sleep(1000);
		}
		catch (InterruptedException e) {
			e.printStackTrace();
		}

		return String.valueOf(res);
	}

	@Override
	public String toString() {
		return mCommand;
	}

	@Override
	public String call() throws Exception {
		System.out.println(Thread.currentThread().getName() + " started, command: " + mCommand +
																		", parameter: " + mParameter);
		mResult = processCommand();
		System.out.println(Thread.currentThread().getName() + " completed, result = " + mResult);
		
		return mResult;
	}
}
